home *** CD-ROM | disk | FTP | other *** search
/ Visual Cafe 3 / Visual Cafe 3.ISO / Vcafe / JFC.bin / BasicToggleButtonUI.java < prev    next >
Text File  |  1998-06-30  |  7KB  |  256 lines

  1. /*
  2.  * @(#)BasicToggleButtonUI.java    1.38 98/06/23
  3.  *
  4.  * Copyright 1997, 1998 by Sun Microsystems, Inc.,
  5.  * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
  6.  * All rights reserved.
  7.  *
  8.  * This software is the confidential and proprietary information
  9.  * of Sun Microsystems, Inc. ("Confidential Information").  You
  10.  * shall not disclose such Confidential Information and shall use
  11.  * it only in accordance with the terms of the license agreement
  12.  * you entered into with Sun.
  13.  */
  14.  
  15. package com.sun.java.swing.plaf.basic;
  16.  
  17. import java.awt.*;
  18. import java.awt.event.*;
  19.  
  20. import com.sun.java.swing.*;
  21. import com.sun.java.swing.border.*;
  22. import com.sun.java.swing.plaf.*;
  23.  
  24. import java.io.Serializable;
  25.  
  26. /**
  27.  * BasicToggleButton implementation
  28.  * <p>
  29.  * Warning: serialized objects of this class will not be compatible with
  30.  * future swing releases.  The current serialization support is appropriate
  31.  * for short term storage or RMI between Swing1.0 applications.  It will
  32.  * not be possible to load serialized Swing1.0 objects with future releases
  33.  * of Swing.  The JDK1.2 release of Swing will be the compatibility
  34.  * baseline for the serialized form of Swing objects.
  35.  *
  36.  * @version 1.38 06/23/98
  37.  * @author Jeff Dinkins
  38.  */
  39. public class BasicToggleButtonUI extends ToggleButtonUI implements Serializable {
  40.     private static ToggleButtonUI toggleButtonUI;
  41.     private BasicButtonListener listener;
  42.  
  43.     // visual constants
  44.     private static final int defaultTextIconGap = 4;
  45.     private final static Insets defaultMargin = new Insets(2,2,2,2);
  46.  
  47.     protected static Color toggleButtonFocus;
  48.  
  49.     public static ComponentUI createUI(JComponent b) {
  50.         if(toggleButtonUI == null) {
  51.             toggleButtonUI = new BasicToggleButtonUI();
  52.         }
  53.         return toggleButtonUI;
  54.     }
  55.     
  56.     /**
  57.      * insets and margin
  58.      */
  59.  
  60.     public Insets getDefaultMargin(AbstractButton b) {
  61.     return defaultMargin;
  62.     }
  63.  
  64.     public Border getDefaultBorder(AbstractButton b) {
  65.     return UIManager.getBorder("ToggleButton.border");
  66.     }
  67.  
  68.     public int getDefaultTextIconGap(AbstractButton b) {
  69.     return defaultTextIconGap;
  70.     }
  71.  
  72.  
  73.     /**
  74.      * ToggleButtonUI Implementation
  75.      *
  76.      */
  77.  
  78.     public void installUI(JComponent c) {
  79.       installDefaults((AbstractButton) c);
  80.       installListeners((AbstractButton) c);
  81.       installKeyboardActions((AbstractButton) c);
  82.     }
  83.  
  84.  
  85.     protected void installDefaults(AbstractButton b){
  86.       LookAndFeel.installColorsAndFont(b, 
  87.                         "ToggleButton.background", 
  88.                         "ToggleButton.foreground", 
  89.                         "ToggleButton.font");
  90.       LookAndFeel.installBorder(b,"ToggleButton.border");
  91.       toggleButtonFocus = UIManager.getColor("ToggleButton.focus");
  92.  
  93.     }
  94.  
  95.     protected void installListeners(AbstractButton b){
  96.         if (listener == null) {
  97.             listener = createListener(b);
  98.         }
  99.         b.addMouseListener(listener);
  100.         b.addMouseMotionListener(listener);
  101.         b.addFocusListener(listener);
  102.         b.addPropertyChangeListener(listener);
  103.         b.addChangeListener(listener);
  104.     }
  105.  
  106.  
  107.     protected void installKeyboardActions(AbstractButton b){
  108.     listener.installKeyboardActions(b);
  109.     }
  110.  
  111.     public void uninstallUI(JComponent c) {
  112.     uninstallKeyboardActions((AbstractButton) c);
  113.     uninstallListeners((AbstractButton) c);
  114.     uninstallDefaults((AbstractButton) c);
  115.     }
  116.     
  117.     protected void uninstallKeyboardActions(AbstractButton b) {
  118.     listener.uninstallKeyboardActions(b);
  119.     }
  120.     
  121.     protected void uninstallListeners(AbstractButton b) {
  122.         b.removeMouseListener(listener);
  123.         b.removeMouseMotionListener(listener);
  124.     b.removeFocusListener(listener);
  125.         b.removeChangeListener(listener);
  126.     }
  127.  
  128.     protected void uninstallDefaults(AbstractButton b){
  129.     LookAndFeel.uninstallBorder(b);
  130.     }
  131.  
  132.  
  133.     protected BasicButtonListener createListener(AbstractButton b) {
  134.     return new BasicButtonListener(b);
  135.     }
  136.  
  137.  
  138.     public void paint(Graphics g, JComponent c) {
  139.         AbstractButton b = (AbstractButton) c;
  140.         ButtonModel model = b.getModel();
  141.  
  142.         Dimension size = b.getSize();
  143.         FontMetrics fm = g.getFontMetrics();
  144.  
  145.     Insets i = c.getInsets();
  146.  
  147.         Rectangle viewRect = new Rectangle(size);
  148.  
  149.     viewRect.x += i.left;
  150.     viewRect.y += i.top;
  151.     viewRect.width -= (i.right + viewRect.x);
  152.     viewRect.height -= (i.bottom + viewRect.y);
  153.  
  154.         Rectangle iconRect = new Rectangle();
  155.         Rectangle textRect = new Rectangle();
  156.  
  157.     Font f = c.getFont();
  158.     g.setFont(f);
  159.  
  160.     // layout the text and icon
  161.         String text = SwingUtilities.layoutCompoundLabel(
  162.         fm, b.getText(), b.getIcon(),
  163.         b.getVerticalAlignment(), b.getHorizontalAlignment(),
  164.         b.getVerticalTextPosition(), b.getHorizontalTextPosition(),
  165.         viewRect, iconRect, textRect, b.getText() == null ? 0 : defaultTextIconGap
  166.     );
  167.  
  168.  
  169.         g.setColor(b.getBackground());
  170.  
  171.     if (model.isArmed() && model.isPressed() || model.isSelected())
  172.       {
  173.         paintButtonPressed(g,b);
  174.       }
  175.  
  176.     // Paint the Icon
  177.         if(b.getIcon() != null) { 
  178.         paintIcon(g, b, iconRect);
  179.         }
  180.  
  181.     // Draw the Text
  182.         if(text != null && !text.equals("")) {
  183.         paintText(g, b, textRect, text);
  184.         }
  185.       
  186.     // draw the dashed focus line.
  187.         if (b.isFocusPainted() && b.hasFocus()) {
  188.       paintFocus(g, b, viewRect, textRect, iconRect);
  189.     }
  190.     }
  191.  
  192.     protected void paintIcon(Graphics g, AbstractButton b, Rectangle iconRect) {
  193.     ButtonModel model = b.getModel();
  194.     Icon icon = null;
  195.     
  196.     if(!model.isEnabled()) {
  197.         icon = (Icon) b.getDisabledIcon();
  198.     } else if(model.isPressed() && model.isArmed()) {
  199.         icon = (Icon) b.getPressedIcon();
  200.         if(icon == null) {
  201.         // Use selected icon
  202.                icon = (Icon) b.getSelectedIcon();
  203.         } 
  204.     } else if(model.isSelected()) {
  205.         icon = (Icon) b.getSelectedIcon();
  206.     } else if(b.isRolloverEnabled() && model.isRollover()) {
  207.         icon = (Icon) b.getRolloverIcon();
  208.     } 
  209.     
  210.     if(icon == null) {
  211.         icon = (Icon) b.getIcon();
  212.     }
  213.     
  214.     icon.paintIcon(b, g, iconRect.x, iconRect.y);
  215.     }
  216.  
  217.     protected void paintText(Graphics g, AbstractButton b, Rectangle textRect, String text){
  218.     ButtonModel model = b.getModel();
  219.  
  220.         FontMetrics fm = g.getFontMetrics();
  221.  
  222.     if(model.isEnabled()) {
  223.         // *** paint the text normally
  224.                g.setColor(b.getForeground());
  225.         BasicGraphicsUtils.drawString(g,text, model.getMnemonic(),
  226.                       textRect.x,
  227.                       textRect.y + fm.getAscent());
  228.     } else {
  229.         // *** paint the text disabled
  230.                g.setColor(b.getBackground().brighter());
  231.         BasicGraphicsUtils.drawString(g,text,model.getMnemonic(),
  232.                       textRect.x, textRect.y + fm.getAscent());
  233.         g.setColor(b.getBackground().darker());
  234.         BasicGraphicsUtils.drawString(g,text,model.getMnemonic(),
  235.                       textRect.x - 1, textRect.y + fm.getAscent() - 1);
  236.     }
  237.     }
  238.  
  239.     // Basic does nothing - L&F like Motif paint the button's focus
  240.     protected void paintFocus(Graphics g, AbstractButton b,
  241.                   Rectangle viewRect, Rectangle textRect, Rectangle iconRect) {
  242.     }
  243.  
  244.     // Basic does nothing - L&F like Motif shade the button
  245.     protected void paintButtonPressed(Graphics g, AbstractButton b){
  246.     }
  247.  
  248.  
  249.     public Dimension getPreferredSize(JComponent c) {
  250.     AbstractButton b = (AbstractButton)c;
  251.     return BasicGraphicsUtils.getPreferredButtonSize(b, defaultTextIconGap);
  252.     }
  253.  
  254.  
  255. }
  256.